from qiniu import Auth, put_data

# 定义七牛云的访问密钥和私密密钥
access_key = 'kDFDsKS2KPYiB4Qj-n7304NQf3byN4T7dT7YRVFN'
secret_key = 'DYVhc7oc6HGW6wyBeiPCR_WFKb0lXBklvwWxGSkc'


def storage(file_data):
    """
    上传文件到七牛云
    :param file_data: 上传的文件内容（二进制数据）
    :return: 上传成功后返回文件名，否则抛出异常
    """
    # 使用提供的access_key和secret_key创建Auth对象，用于鉴权
    q = Auth(access_key, secret_key)

    # 指定上传的存储空间名称
    bucket_name = 'timimagerepository'

    # 生成上传凭证，3600秒（1小时）有效
    token = q.upload_token(bucket_name, None, 3600)  # None 表示让七牛云自动生成文件名

    """
    调用put_data方法上传文件
    ret: 上传成功后返回的字典，包括文件的hash值和key
    info: 上传响应的信息对象，包含状态码、响应文本等

    None 表示让七牛云自动生成一个文件名（key）。自动生成的文件名通常是一个唯一的标识符，例如文件的 hash 值。
    如果你想自己指定文件名，可以将 None 替换为你希望的文件名字符串。
    """
    ret, info = put_data(token, None, file_data)
    # print(ret)  # 输出上传成功返回的字典
    # print(info)  # 输出上传响应的信息对象

    if info.status_code == 200:
        # status_code为200表示上传成功，成功后取出文件名并返回
        return ret.get("key")
    else:
        # 上传失败则抛出异常，让后面的视图函数中捕获并处理
        raise Exception("上传图片到七牛云失败")


if __name__ == '__main__':
    # 读取本地文件并进行上传测试
    with open(r'C:\桌面壁纸jpg', 'rb') as f:
        file_data = f.read()  # 读取文件的二进制内容
        storage(file_data)  # 调用storage函数上传文件